package pizzaserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Map;
import java.util.StringTokenizer;

public class ServerThread extends Thread {

    private Socket conexao;
    private Map clientes;

    public ServerThread(Socket conexao_, Map clientes_) {
        this.conexao = conexao_;
        this.clientes = clientes_;
    }

    @Override
    public void run() {

        try {
            BufferedReader bufReader =
                    new BufferedReader(
                    new InputStreamReader(conexao.getInputStream()));
            String request = bufReader.readLine();
            String response = null;

            if (request != null) {

                System.out.println("Requisição recebida = " + request);

                StringTokenizer strTk = new StringTokenizer(request, ";");
                int op = Integer.parseInt((String) strTk.nextElement());

                int nrArgumentos = strTk.countTokens();

                String[] args = new String[nrArgumentos];
                for (int i = 0; i < nrArgumentos; i++) {
                    args[i] = (String) strTk.nextElement();
                }
                response = "2;";
                if (op == 1) { // Obter dados do cliente
                    String telefone = new String(args[0]);
                    Cliente cliente = (Cliente)clientes.get(telefone);
                    if (cliente != null) {
                        response = "1;" + cliente.getNome() + ";" + cliente.getEndereco() + ";";
                    }
                }
                if (op == 2) { // Confirmação do pedido
                    String telefone = new String(args[0]);
                    String pizza = new String(args[1]);
                    String tamanho = new String(args[2]);
                    String preco = new String(args[3]);
                    Cliente cliente = (Cliente)clientes.get(telefone);

                    System.out.println();
                    System.out.println("Recebido pedido de "+cliente.getNome()+", para entrega no endereço "+cliente.getEndereco());
                    System.out.println("Dados do pedido: "+pizza+" / "+tamanho+" / "+preco);
                    System.out.println();

                    response = "1;";
                }

                PrintWriter pw = new PrintWriter(conexao.getOutputStream(), true);
                pw.println(response);

            }
            bufReader.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                conexao.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
